#ifndef __DRI_I2C_H__
#define __DRI_I2C_H__

#include "Com_Util.h"

// 宏定义 拉高SCL和拉低SCL
#define SCL_HIGH (GPIOB->ODR |= GPIO_ODR_ODR10)
#define SCL_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR10)

// 宏定义 延时，实现I2C标准传输速度 100kbit/s
#define SCL_DELAY Delay_us(5)

// 宏定义 拉高SDA和拉低SDA
#define SDA_HIGH (GPIOB->ODR |= GPIO_ODR_ODR11)
#define SDA_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR11)

// 宏定义 获取SDA的状态
#define SDA_READ (GPIOB->IDR & GPIO_IDR_IDR11)

/**
 * @brief I2C 初始化
 * 
 */
void Dri_I2C_Init(void);

/**
 * @brief 发送起始信号
 * 
 */
void Dri_I2C_Start(void);

/**
 * @brief 发送停止信号
 * 
 */
void Dri_I2C_Stop(void);

/**
 * @brief 发送一个字节的数据
 * 
 * @param byte 要发送的字节
 */
void Dri_I2C_TransmitByte(uint8_t byte);

/**
 * @brief 接收一个应答信号
 * 
 * @return uint8_t 接收到的应答信号，1表示NACK，0表示ACK
 */
uint8_t Dri_I2C_ReceiveACK(void);

/**
 * @brief 接收一个字节的数据
 * 
 * @return uint8_t 接收到的字节
 */
uint8_t Dri_I2C_ReceiveByte(void);

/**
 * @brief 发送ACK信号
 * 
 * @param ack 要发送的ACK信号
 */
void Dri_I2C_TransmitACK(uint8_t ack);

#endif /* __DRI_I2C_H__ */
